package com.dp.client.views.configuracion;

import java.util.List;

import com.dp.client.dto.ConfiguracionDTO;
import com.dp.client.servicios.configuracion.IServiciosConfiguracion;
import com.dp.client.servicios.configuracion.IServiciosConfiguracionAsync;
import com.dp.client.util.Alerts;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.PopupPanel;
import com.google.gwt.user.client.ui.DialogBox;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.HasVerticalAlignment;
import com.google.gwt.user.client.ui.HorizontalSplitPanel;
import com.google.gwt.user.client.ui.HorizontalPanel;

public class ConfiguracionDialog extends PopupPanel {
	private final ConfiguracionDTO configuracionDTO;
	
	private TextBox txtDescripcion;
	private TextBox txtValor;
	private HorizontalPanel horizontalPanel;
	private Button btnCerrar;
	
	public ConfiguracionDialog(final ConfiguracionDTO Configuracion) {
		super();
		
		FlexTable flowPanel = new FlexTable();
		setWidget(flowPanel);
		flowPanel.setSize("100%", "100%");
		
		flowPanel.setText(0, 0, "Descripcion:");
		txtDescripcion = new TextBox();
		flowPanel.setWidget(0, 1, txtDescripcion);
		
		flowPanel.setText(1, 0, "Valor:");		
		
		txtValor = new TextBox();
		flowPanel.setWidget(1, 1, txtValor);
		flowPanel.getCellFormatter().setVerticalAlignment(1, 1, HasVerticalAlignment.ALIGN_TOP);
		
		horizontalPanel = new HorizontalPanel();
		flowPanel.setWidget(3, 1, horizontalPanel);
		
		Button btnAction = new Button("Registrar");
		horizontalPanel.add(btnAction);
		
		btnCerrar = new Button("Cerrar");
		btnCerrar.addClickHandler(new ClickHandler() {
			public void onClick(ClickEvent event) {
				cerrar();
			}
		});
		horizontalPanel.add(btnCerrar);
		
		this.configuracionDTO = Configuracion;
		if(Configuracion == null){ // se crea Configuracion
			setTitle("Registrar Configuracion");
			btnAction.setText("Registrar");
		}else { // se modifica Configuracion
			setTitle("Modificar Configuracion");
			btnAction.setText("Modificar");
		}
		btnAction.addClickHandler(new ClickHandler() {
			@Override
			public void onClick(ClickEvent event) {
				IServiciosConfiguracionAsync serviciosConfiguracion = GWT.create(IServiciosConfiguracion.class);
				serviciosConfiguracion.registrarConfiguracion(readConfiguracionDTO(), new AsyncCallback<Boolean>() {

					@Override
					public void onFailure(Throwable caught) {
						Alerts.dialogErrorConexion();
					}

					@Override
					public void onSuccess(Boolean result) {
						if(Configuracion == null)
							Alerts.dialogExitoCreacionDeObjeto("Configuracion");
						else
							Alerts.dialogExitoModificacionDeObjeto("Configuracion");
						
					}
				});
			}
		});
		
		this.setGlassEnabled(true);
		this.setAnimationEnabled(true);
		
		//init
		llenaDatos(configuracionDTO);
	}
	private void llenaDatos(ConfiguracionDTO configuracionDTO){
		if(configuracionDTO == null) return;
		txtDescripcion.setText(configuracionDTO.getDescripcion());
		txtValor.setText(""+configuracionDTO.getValor());
	}
	private ConfiguracionDTO readConfiguracionDTO(){
		ConfiguracionDTO configuracion = this.configuracionDTO == null ? new ConfiguracionDTO() : this.configuracionDTO;
		configuracion.setDescripcion(txtDescripcion.getText());
		configuracion.setValor(Integer.parseInt(txtValor.getText()));
		return configuracion;
	}
	void cerrar(){
		this.hide();
	}
}

